home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / djgpp / clients / xmodmap / wq.h < prev    next >
C/C++ Source or Header  |  1994-08-12  |  4KB  |  136 lines

  1. /*
  2.  * xmodmap - program for loading keymap definitions into server
  3.  *
  4.  * $XConsortium: wq.h,v 1.4 88/10/08 15:41:34 jim Exp $
  5.  *
  6.  * Copyright 1988 Massachusetts Institute of Technology
  7.  *
  8.  * Permission to use, copy, modify, and distribute this software and its
  9.  * documentation for any purpose and without fee is hereby granted, provided
  10.  * that the above copyright notice appear in all copies and that both that
  11.  * copyright notice and this permission notice appear in supporting
  12.  * documentation, and that the name of M.I.T. not be used in advertising or
  13.  * publicity pertaining to distribution of the software without specific,
  14.  * written prior permission.  M.I.T. makes no representations about the
  15.  * suitability of this software for any purpose.  It is provided "as is"
  16.  * without express or implied warranty.
  17.  *
  18.  * Author:  Jim Fulton, MIT X Consortium
  19.  */
  20.  
  21.  
  22. /* 
  23.  * Input is parsed and a work queue is built that is executed later.  This
  24.  * allows us to swap keys as well as ensure that we don't mess up the keyboard
  25.  * by doing a partial rebind.
  26.  */
  27.  
  28. enum opcode { doKeycode, doAddModifier, doRemoveModifier, doClearModifier,
  29.           doPointer };
  30.  
  31. struct op_generic {
  32.     enum opcode type;            /* oneof enum opcode */
  33.     union op *next;            /* next element in list or NULL */
  34. };
  35.  
  36.  
  37. /*
  38.  * keycode KEYCODE = KEYSYM
  39.  * keysym OLDKEYSYM = NEWKEYSYM
  40.  *
  41.  * want to eval the OLDKEYSYM before executing the work list so that it isn't
  42.  * effected by any assignments.
  43.  */
  44.  
  45. struct op_keycode {
  46.     enum opcode type;            /* doKeycode */
  47.     union op *next;            /* next element in list or NULL */
  48.     KeyCode target_keycode;        /* key to which we are assigning */
  49.     int count;                /* number of new keysyms */
  50.     KeySym *keysyms;            /* new values to insert */
  51. };
  52.  
  53.  
  54. /*
  55.  * add MODIFIER = KEYSYM ...
  56.  */
  57.  
  58. struct op_addmodifier {
  59.     enum opcode type;            /* doAddModifier */
  60.     union op *next;            /* next element in list or NULL */
  61.     int modifier;            /* index into modifier list */
  62.     int count;                /* number of keysyms */
  63.     KeySym *keysyms;            /* new values to insert */
  64. };
  65.  
  66.  
  67. /*
  68.  * remove MODIFIER = OLDKEYSYM ...
  69.  *
  70.  * want to eval the OLDKEYSYM before executing the work list so that it isn't
  71.  * effected by any assignments.
  72.  */
  73.  
  74. struct op_removemodifier {
  75.     enum opcode type;            /* doRemoveModifier */
  76.     union op *next;            /* next element in list or NULL */
  77.     int modifier;            /* index into modifier list */
  78.     int count;                /* number of keysyms */
  79.     KeyCode *keycodes;            /* old values to remove */
  80. };
  81.  
  82.  
  83. /*
  84.  * clear MODIFIER
  85.  */
  86.  
  87. struct op_clearmodifier {
  88.     enum opcode type;            /* doClearModifier */
  89.     union op *next;            /* next element in list or NULL */
  90.     int modifier;            /* index into modifier list */
  91. };
  92.  
  93. /*
  94.  * pointer = NUMBER ...
  95.  *
  96.  * set pointer map to the positive numbers given on the right hand side
  97.  */
  98.  
  99. #define MAXBUTTONCODES 256        /* there are eight bits of buttons */
  100.  
  101. struct op_pointer {
  102.     enum opcode type;            /* doPointer */
  103.     union op *next;            /* next element in list or NULL */
  104.     int count;                /* number of new button codes */
  105.     unsigned char button_codes[MAXBUTTONCODES];
  106. };
  107.  
  108.  
  109. /*
  110.  * all together now
  111.  */
  112. union op {
  113.     struct op_generic generic;
  114.     struct op_keycode keycode;
  115.     struct op_addmodifier addmodifier;
  116.     struct op_removemodifier removemodifier;
  117.     struct op_clearmodifier clearmodifier;
  118.     struct op_pointer pointer;
  119. };
  120.  
  121. extern struct wq {
  122.     union op *head;
  123.     union op *tail;
  124. } work_queue;
  125.  
  126.  
  127. extern struct modtab {
  128.     char *name;
  129.     int length;
  130.     int value;
  131. } modifier_table[];
  132.  
  133. #define AllocStruct(s) ((s *) malloc (sizeof (s)))
  134.  
  135. #define MAXKEYSYMNAMESIZE 80        /* absurdly large */
  136.